From: Timm Bäder Date: Thu, 15 Aug 2019 15:12:30 +0000 (+0200) Subject: scaler: Avoid some signal connections X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1~1^2~321^2^2~1017 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=d2f76d689f9bf0819b929953fd88bc81b6ee583f;p=gtk4.git scaler: Avoid some signal connections We're mainly using this for icons that will never change contents or size, and we're using a GtkScaler per such icon when on a hidpi setup, so just avoid the two signal connections per icon. --- diff --git a/gtk/gtkscaler.c b/gtk/gtkscaler.c index 3824635bf2..c07a083f36 100644 --- a/gtk/gtkscaler.c +++ b/gtk/gtkscaler.c @@ -122,8 +122,14 @@ gtk_scaler_dispose (GObject *object) if (self->paintable) { - g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_contents, self); - g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_size, self); + const guint flags = gdk_paintable_get_flags (self->paintable); + + if ((flags & GDK_PAINTABLE_STATIC_CONTENTS) == 0) + g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_contents, self); + + if ((flags & GDK_PAINTABLE_STATIC_SIZE) == 0) + g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_size, self); + g_clear_object (&self->paintable); } @@ -149,6 +155,7 @@ gtk_scaler_new (GdkPaintable *paintable, double scale_factor) { GtkScaler *self; + guint flags; g_return_val_if_fail (GDK_IS_PAINTABLE (paintable), NULL); g_return_val_if_fail (scale_factor > 0.0, NULL); @@ -156,8 +163,14 @@ gtk_scaler_new (GdkPaintable *paintable, self = g_object_new (GTK_TYPE_SCALER, NULL); self->paintable = g_object_ref (paintable); - g_signal_connect_swapped (paintable, "invalidate-contents", G_CALLBACK (gdk_paintable_invalidate_contents), self); - g_signal_connect_swapped (paintable, "invalidate-size", G_CALLBACK (gdk_paintable_invalidate_size), self); + flags = gdk_paintable_get_flags (paintable); + + if ((flags & GDK_PAINTABLE_STATIC_CONTENTS) == 0) + g_signal_connect_swapped (paintable, "invalidate-contents", G_CALLBACK (gdk_paintable_invalidate_contents), self); + + if ((flags & GDK_PAINTABLE_STATIC_SIZE) == 0) + g_signal_connect_swapped (paintable, "invalidate-size", G_CALLBACK (gdk_paintable_invalidate_size), self); + self->scale_factor = scale_factor; return GDK_PAINTABLE (self);